package com.gzu.finalwork.admin.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.gzu.finalwork.entity.courier.Couriers;

@Mapper
public interface AdCourierMapper {
    
    // 查询方法
    /**
     * 查询所有配送员（带用户信息）
     */
    List<Couriers> selectAllCouriers();
    
    /**
     * 根据ID查询配送员（带用户信息）
     */
    Couriers selectCourierById(Integer id);
    
    /**
     * 根据用户ID查询配送员
     */
    Couriers selectCourierByUserId(Integer userId);
    
    /**
     * 根据工号查询配送员
     */
    Couriers selectCourierByJobNumber(String jobNumber);
    
    /**
     * 根据区域查询配送员
     */
    List<Couriers> selectCouriersByArea(String area);
    
    /**
     * 根据状态查询配送员
     */
    List<Couriers> selectCouriersByStatus(String status);
    
    /**
     * 条件查询配送员
     */
    List<Couriers> selectCouriersByCondition(Couriers courier);
    
    // 插入方法
    /**
     * 插入配送员
     */
    int insertCourier(Couriers courier);
    
    // 更新方法
    /**
     * 更新配送员信息
     */
    int updateCourier(Couriers courier);
    
    /**
     * 更新配送量
     */
    int updateDeliveryCount(@Param("courierId") Integer courierId, @Param("increment") Integer increment);
    
    // 删除方法
    /**
     * 删除配送员
     */
    int deleteCourier(Integer id);
    
    /**
     * 根据用户ID删除配送员
     */
    int deleteCourierByUserId(Integer userId);
    
    /**
     * 批量删除配送员
     */
    int deleteCouriersByIds(List<Integer> ids);
    
    // 统计方法
    /**
     * 统计配送员总数
     */
    int countCouriers();
    
    /**
     * 根据状态统计配送员数量
     */
    int countCouriersByStatus(String status);
    
    /**
     * 根据区域统计配送员数量
     */
    int countCouriersByArea(String area);
    
    /**
     * 获取配送员排行榜（按派送量排序）
     */
    List<Couriers> getCourierRanking(Integer limit);
    
    // 兼容旧方法（保持向后兼容）
    /**
     * 获取所有快递员 - 兼容旧方法
     */
    default List<Couriers> getCouriers() {
        return selectAllCouriers();
    }
    
    /**
     * 添加快递员 - 兼容旧方法
     */
    default void addCourier(Couriers courier) {
        insertCourier(courier);
    }
    
    /**
     * 修改快递员 - 兼容旧方法
     */
    default void updateCourier(Integer id, Couriers courier) {
        courier.setId(id);
        updateCourier(courier);
    }
}
